home *** CD-ROM | disk | FTP | other *** search
/ Sprite 1984 - 1993 / Sprite 1984 - 1993.iso / src / lib / c / bstring / RCS / bzero.c,v < prev    next >
Text File  |  1992-05-14  |  6KB  |  280 lines

  1. head     1.7;
  2. branch   ;
  3. access   ;
  4. symbols  sprited:1.6.1;
  5. locks    ; strict;
  6. comment  @ * @;
  7.  
  8.  
  9. 1.7
  10. date     92.05.14.18.56.24;  author kupfer;  state Exp;
  11. branches ;
  12. next     1.6;
  13.  
  14. 1.6
  15. date     91.03.24.19.03.13;  author kupfer;  state Exp;
  16. branches 1.6.1.1;
  17. next     1.5;
  18.  
  19. 1.5
  20. date     90.09.11.14.13.22;  author kupfer;  state Exp;
  21. branches ;
  22. next     1.4;
  23.  
  24. 1.4
  25. date     89.01.26.12.48.53;  author ouster;  state Exp;
  26. branches ;
  27. next     1.3;
  28.  
  29. 1.3
  30. date     88.11.28.09.28.41;  author rab;  state Exp;
  31. branches ;
  32. next     1.2;
  33.  
  34. 1.2
  35. date     88.07.19.13.26.48;  author mendel;  state Exp;
  36. branches ;
  37. next     1.1;
  38.  
  39. 1.1
  40. date     88.04.25.21.39.27;  author ouster;  state Exp;
  41. branches ;
  42. next     ;
  43.  
  44. 1.6.1.1
  45. date     91.12.02.21.28.26;  author kupfer;  state Exp;
  46. branches ;
  47. next     ;
  48.  
  49.  
  50. desc
  51. @@
  52.  
  53.  
  54. 1.7
  55. log
  56. @Remove debugging check for incorrect access to user addresses.  Use
  57. the ANSI signature (void pointers, etc).
  58. @
  59. text
  60. @/* 
  61.  * bzero.c --
  62.  *
  63.  *    Source code for the "bzero" library routine.
  64.  *
  65.  * Copyright 1988 Regents of the University of California
  66.  * Permission to use, copy, modify, and distribute this
  67.  * software and its documentation for any purpose and without
  68.  * fee is hereby granted, provided that the above copyright
  69.  * notice appear in all copies.  The University of California
  70.  * makes no representations about the suitability of this
  71.  * software for any purpose.  It is provided "as is" without
  72.  * express or implied warranty.
  73.  */
  74.  
  75. #ifndef lint
  76. static char rcsid[] = "$Header: /sprite/src/lib/c/bstring/RCS/bzero.c,v 1.6 91/03/24 19:03:13 kupfer Exp Locker: kupfer $ SPRITE (Berkeley)";
  77. #endif not lint
  78.  
  79. #include <bstring.h>
  80. #include <machparam.h>
  81.  
  82. /*
  83.  * The following mask is used to detect proper alignment of addresses
  84.  * for doing word operations instead of byte operations.  It is
  85.  * machine-dependent.  If none of the following bits are set in an
  86.  * address, then word-based operations may be used. This value is imported
  87.  * from machparam.h
  88.  */
  89.  
  90. #define WORDMASK WORD_ALIGN_MASK
  91.  
  92. /*
  93.  *----------------------------------------------------------------------
  94.  *
  95.  * bzero --
  96.  *
  97.  *    Clear a block of memory to zeroes.  This routine is optimized
  98.  *    to do the clear in integer units, if the block is properly
  99.  *    aligned.
  100.  *
  101.  * Results:
  102.  *    Nothing is returned.  The memory at destPtr is cleared.
  103.  *
  104.  * Side effects:
  105.  *    None.
  106.  *
  107.  *----------------------------------------------------------------------
  108.  */
  109.  
  110. void
  111. bzero(destVoidPtr, numBytes)
  112.     _VoidPtr destVoidPtr;        /* Where to zero. */
  113.     register int numBytes;        /* How many bytes to zero. */
  114. {
  115.     register int *dPtr = (int *) destVoidPtr;
  116.     char *destPtr = destVoidPtr;
  117.  
  118.     /*
  119.      * If the address is on an aligned boundary then zero as much
  120.      * as we can in big transfers (and also avoid loop overhead by
  121.      * storing many zeros per iteration).  Once we have less than
  122.      * a whole int to zero then it must be done by byte zeroes.
  123.      */
  124.  
  125.     if (((int) dPtr & WORDMASK) == 0) {
  126.     while (numBytes >= 16*sizeof(int)) {
  127.         dPtr[0] = 0;
  128.         dPtr[1] = 0;
  129.         dPtr[2] = 0;
  130.         dPtr[3] = 0;
  131.         dPtr[4] = 0;
  132.         dPtr[5] = 0;
  133.         dPtr[6] = 0;
  134.         dPtr[7] = 0;
  135.         dPtr[8] = 0;
  136.         dPtr[9] = 0;
  137.         dPtr[10] = 0;
  138.         dPtr[11] = 0;
  139.         dPtr[12] = 0;
  140.         dPtr[13] = 0;
  141.         dPtr[14] = 0;
  142.         dPtr[15] = 0;
  143.         dPtr += 16;
  144.         numBytes -= 16*sizeof(int);
  145.     }
  146.     while (numBytes >= sizeof(int)) {
  147.         *dPtr++ = 0;
  148.         numBytes -= sizeof(int);
  149.     }
  150.     if (numBytes == 0) {
  151.         return;
  152.     }
  153.     destPtr = (char *) dPtr;
  154.     }
  155.  
  156.     /*
  157.      * Zero the remaining bytes
  158.      */
  159.  
  160.     while (numBytes > 0) {
  161.     *destPtr++ = 0;
  162.     numBytes--;
  163.     }
  164. }
  165. @
  166.  
  167.  
  168. 1.6
  169. log
  170. @Small hack so that the kernel can check for incorrect references to
  171. user addresses.
  172. @
  173. text
  174. @d17 1
  175. a17 1
  176. static char rcsid[] = "$Header: /sprite/src/lib/c/bstring/RCS/bzero.c,v 1.5 90/09/11 14:13:22 kupfer Exp Locker: kupfer $ SPRITE (Berkeley)";
  177. d20 3
  178. a30 2
  179. #include "machparam.h"
  180.  
  181. a32 4
  182. #ifdef KERNEL
  183. #include <vmHack.h>
  184. #endif
  185.  
  186. d52 2
  187. a53 2
  188. bzero(destPtr, numBytes)
  189.     char *destPtr;            /* Where to zero. */
  190. d56 2
  191. a57 5
  192.     register int *dPtr = (int *) destPtr;
  193.  
  194. #ifdef VM_CHECK_BSTRING_ACCESS
  195.     Vm_CheckAccessible(destPtr, numBytes);
  196. #endif
  197. @
  198.  
  199.  
  200. 1.6.1.1
  201. log
  202. @Initial branch for Sprite server.
  203. @
  204. text
  205. @d17 1
  206. a17 1
  207. static char rcsid[] = "$Header: /sprite/src/lib/c/bstring/RCS/bzero.c,v 1.6 91/03/24 19:03:13 kupfer Exp $ SPRITE (Berkeley)";
  208. @
  209.  
  210.  
  211. 1.5
  212. log
  213. @Lint.
  214. @
  215. text
  216. @d17 1
  217. a17 1
  218. static char rcsid[] = "$Header: /sprite/src/lib/c/bstring/RCS/bzero.c,v 1.4 89/01/26 12:48:53 ouster Exp Locker: kupfer $ SPRITE (Berkeley)";
  219. d32 4
  220. d60 4
  221. @
  222.  
  223.  
  224. 1.4
  225. log
  226. @Change return value back to <empty> for UNIX compatibility.
  227. @
  228. text
  229. @d17 1
  230. a17 1
  231. static char rcsid[] = "$Header: /sprite/src/lib/c/bstring/RCS/bzero.c,v 1.3 88/11/28 09:28:41 rab Exp Locker: ouster $ SPRITE (Berkeley)";
  232. d50 1
  233. @
  234.  
  235.  
  236. 1.3
  237. log
  238. @Changed return value to void.
  239. @
  240. text
  241. @d17 1
  242. a17 1
  243. static char rcsid[] = "$Header: /sprite/src/lib/c/bstring/RCS/bzero.c,v 1.2 88/07/19 13:26:48 mendel Exp Locker: rab $ SPRITE (Berkeley)";
  244. a49 1
  245. void
  246. @
  247.  
  248.  
  249. 1.2
  250. log
  251. @Import WORD_ALIGN_MASK from machparam.h.
  252. @
  253. text
  254. @d17 1
  255. a17 1
  256. static char rcsid[] = "$Header: bzero.c,v 1.1 88/04/25 21:39:27 ouster Exp $ SPRITE (Berkeley)";
  257. d50 1
  258. d56 1
  259. a56 1
  260.     
  261. @
  262.  
  263.  
  264. 1.1
  265. log
  266. @Initial revision
  267. @
  268. text
  269. @d17 1
  270. a17 1
  271. static char rcsid[] = "$Header: bzero.c,v 1.1 88/04/25 13:25:41 ouster Exp $ SPRITE (Berkeley)";
  272. d24 2
  273. a25 2
  274.  * address, then word-based operations may be used.  Eventually this
  275.  * mask needs to be handled in a more machine-independent fashion.
  276. d28 4
  277. a31 1
  278. #define WORDMASK 0x1
  279. @
  280.